// 求组合数 卢卡斯定理
// C(n, m) ≡ C(n/p, m/p) * C(n%p, m%p)(mod p)，其中 p 为质数
// 测试链接 ：https://www.luogu.com.cn/problem/P3807
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16770316.html
// 相关帖子 ：https://oi-wiki.org/math/number-theory/lucas/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

#define ll long long
const int MAXN = 100010;
ll f[MAXN], g[MAXN];

ll quickPow(ll a, ll b, ll p)
{
    ll ans = 1;
    while(b)
    {
        if(b & 1) ans = ans * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return ans;
}

void init(ll p)
{
    f[0] = g[0] = 1;
    for(int i = 1; i <= p; ++i)
    {
        f[i] = f[i - 1] * i % p;
        g[i] = g[i - 1] * quickPow(i, p - 2, p) % p;
    }
}

ll C(int n, int m, int p)
{
    if(m > n) return 0;
    return f[n] * g[m] * g[n - m] % p;
}

int lucas(ll n, ll m, int p)
{
    if(m == 0) return 1;
    return lucas(n / p, m / p, p) * C(n % p, m % p, p) % p;
}

int main()
{
    int q, n, m, p;
    scanf("%d", &q);
    while(q--)
    {
        scanf("%d%d%d", &n, &m, &p);
        init(p);
        printf("%lld\n", lucas(n + m, n, p));
    }

    return 0;
}